// https://leetcode.cn/problems/fruit-into-baskets/description/
class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int maxFruit = 0;
        unordered_map<int, int> count;
        int i = 0, j = 0;

        while (j < fruits.size()) {
            // 将遇到的新水果加入到计数器中
            count[fruits[j]]++;

            // 保证篮子中的水果种类不超过两种
            while (count.size() > 2) {
                count[fruits[i]]--;  // 减少计数
                if (count[fruits[i]] == 0) {
                    count.erase(fruits[i]);  // 从计数器中移除
                }
                i++;
            }

            // 更新最大水果数量
            maxFruit = max(maxFruit, j - i + 1);
            j++;
        }

        return maxFruit;
    }
};